package br.uniriotec.pssgbd.gerencia.model.bo;

import java.util.ArrayList;
import java.util.List;

import br.uniriotec.pssgbd.gerencia.model.entidade.Bairro;
import br.uniriotec.pssgbd.gerencia.model.entidade.Cidade;
import br.uniriotec.pssgbd.gerencia.model.entidade.Cliente;
import br.uniriotec.pssgbd.gerencia.model.entidade.Estado;
import br.uniriotec.pssgbd.gerencia.model.entidade.Local;
/**
 * Classe que simula (mock) a classe ClienteBO manipulando o cliente em mem�ria.
 * Est� classe poder� ser substitu�da sem causar grandes impactos na implementa��o da aplica��o.
 * Basta alterar a chamada ao BO nas classes servlet.
 * @author Flavio
 *
 */
public class LocalBO extends BaseBO<Local> {
	private static LocalBO instancia;
	private static List<Local> listaLocal = null;

	public static LocalBO getInstance() {
		if (instancia == null) {
			instancia = new LocalBO();
			listaLocal = new ArrayList<Local>();
		}
		return instancia;
	}

	public void incluir(Local local) throws Exception {
		local.setId((long)listaLocal.size() + 1);
		listaLocal.add(local);
	}

	public List<Cidade> listarCidades() throws Exception {
		List<Cidade> listaCidades = new ArrayList<Cidade>();
		Cidade cidade = null;

		cidade = new Cidade();
		cidade.setCodCidade(1);
		cidade.setNome("Rio de Janeiro");
		listaCidades.add(cidade);

		cidade = new Cidade();
		cidade.setCodCidade(2);
		cidade.setNome("S�o Paulo");
		listaCidades.add(cidade);

		cidade = new Cidade();
		cidade.setCodCidade(3);
		cidade.setNome("Belo Horizonte");
		listaCidades.add(cidade);

		return listaCidades;
	}

	public List<Bairro> listarBairro() throws Exception {
		List<Bairro> listaBairro = new ArrayList<Bairro>();
		Bairro bairro = null;

		bairro = new Bairro();
		bairro.setCodBairro(1);
		bairro.setNome("Recreio");
		listaBairro.add(bairro);

		bairro = new Bairro();
		bairro.setCodBairro(2);
		bairro.setNome("Grajau");
		listaBairro.add(bairro);

		bairro = new Bairro();
		bairro.setCodBairro(3);
		bairro.setNome("Meier");
		listaBairro.add(bairro);

		return listaBairro;
	}
	
	public List<Estado> listarEstado() throws Exception {
		List<Estado> listaEstado = new ArrayList<Estado>();
		Cidade cidade = null;

		Estado estado = new Estado();
		estado.setCodEstado(1);
		estado.setNome("Rio de Janeiro");
		listaEstado.add(estado);

		estado = new Estado();
		estado.setCodEstado(2);
		estado.setNome("S�o Paulo");
		listaEstado.add(estado);

		estado = new Estado();
		estado.setCodEstado(3);
		estado.setNome("Minas");
		listaEstado.add(estado);

		return listaEstado;
	}
	
	
	public Local consultar(Long id) throws Exception {
		int indice = 0;
		for (Local l : listaLocal) {
			if (l.getId() == id) {
				break;
			}
			indice++;
		}
		return listaLocal.get(indice);
	}

	public void alterar(Local local) throws Exception {
		int indice = 0;
		for (Local l : listaLocal) {
			if (listaLocal.get(indice).getId() == local.getId()) {
				listaLocal.remove(indice);
				listaLocal.add(local);
				break;
			}
			indice++;
		}		
	}

	@Override
	public void excluir(Local local) throws Exception {
		listaLocal.remove(local);
	}

	@Override
	public List<Local> listar() throws Exception {
		return listaLocal;
	}

}
